# -*- coding: utf8 -*-
import time
from openerp.osv import fields, osv
from pychart.arrow import default
from datetime import datetime 
from babel.dates import datetime_
# Thảo_class
class dmnvl(osv.osv):
    _name = "khonvl.dmnvl"
    _columns = {
        'ma': fields.char(u'Mã NVL', size=30),
        'ten': fields.char(u'Tên NVL', size=70),
        'donvitinh': fields.char(u'Đơn vị tính'),
        'kho':fields.many2one('khonvl.kho', u'Tên kho'),
        # 'ten_khoa':fields.related('gender','tenkhoa',readonly = True, type='char',relation= 'sinhvien.khoa',string= u'Ma Khoa'),
        'ghichu':fields.text(u'Ghi chú')
    }
    _rec_name = 'ma'
dmnvl()

class kho(osv.osv):
    _name = "khonvl.kho"
    _columns = {
                'makho':fields.char(u'Mã kho', required=True),
                'tenkho':fields.char(u'Tên kho', size=64),
                'diachi':fields.char(u'Địa chỉ'),
                'dmnvl':fields.one2many('khonvl.dmnvl', 'kho', u'Danh mục NVL'),
               # 'dssinhvien_getinfo':fields.related('dsssinhvien','gender', type='char', relation='sinhvien.sinhvien', string=''),  
                }
    _rec_name = 'tenkho'
kho()

class ctnvl(osv.osv):
    _name = "khonvl.ctnvl"
    _columns = {
                'ma':fields.many2one('khonvl.dmnvl', u'Mã NVL', required=True),
                'soluong':fields.integer(u'Số lượng'),
               }
    _rec_name = 'ma'
ctnvl()
# Kiên_class
class nhap_nvl(osv.osv):
    _name = "khonvl.nhapnvl"
    _columns = {
                'maphieu':fields.char(u'Mã Phiếu', size=64, required=True),
                'manvl':fields.one2many('khonvl.chitietnhapnvl', 'manvl', u'Mã NVL', required=True),
                'khonvl':fields.many2one('khonvl.kho', u'Kho NVL' , required=True),
                'thoigian_nhap': fields.date(u'Thời gian nhập'),
                'bophancc_tiepnhan':fields.many2one('khonvl.chitietbophancc', u'Bộ Phận Sản Xuất'),
                        }
    _order = 'maphieu'
    _rec_name = 'maphieu'
nhap_nvl()
class chitietnhap_nvl(osv.osv):
    _name = "khonvl.chitietnhapnvl"
    _columns = {
            'manvl':fields.many2one('khonvl.nhapnvl', u'Mã NVL'),
            'soluong':fields.integer(u'Số Lượng'),
            'donvi':fields.char(u'Đơn vị', size=32),
                    }
    _rec_name = 'manvl'
chitietnhap_nvl()
class chitiet_bophancc(osv.osv):
    _name = "khonvl.chitietbophancc"
    _columns = {
            'mabpcc':fields.char(u'Mã BPCC', size=64, required=True),
            'tenbpcc':fields.char(u'Tên BPCC', size=64),
            'dienthoai':fields.integer(u'Điện Thoại'),
            'ghichu':fields.text("Ghi Chú"),
            'dsnvl_nhap':fields.one2many('khonvl.nhapnvl', 'bophancc_tiepnhan', u'DSNVL Nhập'),
                    }
    _rec_name = 'mabpcc'
chitiet_bophancc()
   

# Duy_class
# Chánh Mập_class
# Chánh Master_class
class xuat_nvl(osv.osv):
    _name = "khonvl.xuatnvl"
    _columns = {
                'maphieu':fields.char(u'Mã Phiếu', size=64, required=True),
                'manvl':fields.one2many('khonvl.chitietxuatnvl', 'manvl', u'Mã NVL', required=True),
                'khonvl':fields.many2one('khonvl.kho', u'Kho NVL' , required=True),
                'thoigian_xuat': fields.date(u'Thời gian xuất'),
                'bophansx_tiepnhan':fields.many2one('khonvl.chitietbophansx', u'Bộ Phận Sản Xuất'),
                        }
    _order = 'maphieu'
    _rec_name = 'maphieu'
xuat_nvl()
class chitietxuat_nvl(osv.osv):
    _name = "khonvl.chitietxuatnvl"
    _columns = {
            'manvl':fields.many2one('khonvl.xuatnvl', u'Mã NVL'),
            'soluong':fields.integer(u'Số Lượng'),
            'donvi':fields.char(u'Đơn vị', size=32),
                    }
    _rec_name = 'manvl'
chitietxuat_nvl()
class chitiet_bophansx(osv.osv):
    _name = "khonvl.chitietbophansx"
    _columns = {
            'mabpsx':fields.char(u'Mã BPSX', size=64, required=True),
            'tenbpsx':fields.char(u'Tên BPSX', size=64),
            'dienthoai':fields.integer(u'Điện Thoại'),
            'ghichu':fields.text("Ghi Chú"),
            'dsnvl_xuat':fields.one2many('khonvl.xuatnvl', 'bophansx_tiepnhan', u'DSNVL Xuất'),
                    }
    _rec_name = 'mabpsx'
chitiet_bophansx()
    
class phieuyeucaucc(osv.osv):
    def pyccc_new(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'new' })
        return True
        
    def pyccc_xuly(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'xuly' })
        return True

    def pyccc_huy(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'huy' })
        return True

    def pyccc_thanhcong(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'thanhcong' })    
        c_donhang_01 = self.read(cr, uid, ids)[0]
        idphieudonhang_01 = self.pool.get('khonvl.chitietpc').create(cr, uid,
               {
        'ma': c_donhang_01['ma'],
        'loai': c_donhang_01['loai'],     
        'nhacc': c_donhang_01['nhacc'][1],   
        'ngaylap': c_donhang_01['ngaylap'],  
        'handinh': c_donhang_01['handinh'],  
        'nguoilap': c_donhang_01['nguoilap'], 
                })              
        self.write(cr, uid, ids, { 'state' : 'thanhcong' })     
        return True

    def pyccc_nvl(self, cr, uid, ids, context=None):
        ctnvl = self.pool.get('khonvl.ctnvl')
        ma01 = ctnvl.create(cr, uid, {'soluong':ids[0]}, context=context) 
        return True
    _name ="khonvl.pyccc"
    _columns ={
        'ma': fields.char('Mã Phiếu Yêu Cầu',size=100,required=True),
        'loai':fields.selection([('donhang','Đơn Hàng'),('dinhky','Định Kỳ')],'Theo Loại', required = True),
        'nhacc': fields.many2one('khonvl.chitietbophancc','Nhà cung cấp'),
        'ngaylap': fields.date('Ngày Lập Phiếu',readonly=True ),        
        'nhacc': fields.many2one('khonvl.chitietbophancc','Nhà cung cấp'),
        'ngaylap': fields.date('Ngày Lập Phiếu'),        
        'handinh': fields.date('Hạn Định'),
        'nguoilap': fields.integer('Người Lập'),
        'dssanpham': fields.one2many('khonvl.phieuyeucaunhap_sanpham','maphieu','Danh Sách Sản Phẩm'),
        'state': fields.selection([
        ('new','Mới'),
        ('xuly','Xác Nhận'),
        ('thanhcong','Thành Công'),
        ('huy','Hủy')],'Trạng Thái', readonly=True)
    }
    _defaults={
               'loai':'dinhky',
               'ngaylap': datetime.now()
    
    }
phieuyeucaucc()
class phieuyeucaunhap_sanpham(osv.osv):
    _name ="khonvl.phieuyeucaunhap_sanpham"
    _desciption ="Chi tiết Phiếu Yêu Cầu Nhập"
    _columns ={
        'tennvl': fields.many2one('khonvl.dmnvl',u'Tên NVL',size=100),
        'soluongnhap': fields.integer('Số Lượng'),
        'maphieu': fields.many2one('khonvl.pyccc','Mã Phiếu Yêu Cầu')
    }
phieuyeucaunhap_sanpham()

class chitietpc(osv.osv):
    def _get_lines(self, cr, uid, ids, fields, args, context=None):
        line_obj = self.pool.get('khonvl.phieuyeucaunhap_sanpham')
        res = {}
        for script in self.browse(cr, uid, ids, context=context):
            line_ids = line_obj.search(cr, uid,[('maphieu', '=', script.id)])
            res[script.id] = line_ids
        return res
    
    _name ="khonvl.chitietpc"
    _columns ={
        'ma': fields.char('Mã Phiếu Yêu Cầu',size=100,required=True,readonly=True),
        'loai':fields.selection([('donhang','Đơn Hàng'),('dinhky','Định Kỳ')],'Theo Loại', required = True,readonly=True),
        'nhacc': fields.char('Nhà cung cấp',readonly=True),
        'ngaylap': fields.date('Ngày Lập Phiếu',readonly=True),        
        'handinh': fields.date('Hạn Định',readonly=True),
        'nguoilap': fields.integer('Người Lập',readonly=True),
        'dssanpham': fields.function(_get_lines, type='one2many',relation='khonvl.phieuyeucaunhap_sanpham',string='Danh sách sản phẩm'),
    }
chitietpc()

class phieunhapct(osv.osv):
    def phieunhapct_new(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'new' })
        return True
        
    def phieunhapct_xuly(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'xuly' })
        return True

    def phieunhapct_huy(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'huy' })
        return True

    def phieunhapct_thanhcong(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'thanhcong' })
        return True
    
    def phieunhapct_nvl(self, cr, uid, ids, context=None):
        ctnvl = self.pool.get('khonvl.ctnvl')
        ma01 = ctnvl.create(cr, uid, {'soluong':ids[0]}, context=context) 
        return True
    
    def _get_one2many_test(self, cr, uid, ids, field_names, arg, context=None):
        res = {}
        for partner in self.browse(cr, uid, ids, context=context):
            res[partner.id] = []
            o2m_obj = self.pool.get('khonvl.ctnvl')
            exist_ids = o2m_obj.search(cr, uid, [('ma','=',partner.id), ('soluong','=','10')], context=context, order='id asc')
            if exist_ids:
            # just in case there are duplicate entries (to keep the db clean):
                unlink_ids = o2m_obj.search(cr, uid, [('ma','in',exist_ids), ('ma','!=',exist_ids[0])], context=context)
        return res
        
    _name ="khonvl.phieunhapct"
    _columns ={
        'ma': fields.char('Mã Phiếu',size=100,required=True),
        'loai':fields.selection([('donhang','Đơn Hàng'),('dinhky','Định Kỳ')],'Theo Loại', required = True),
        'ngaylap': fields.date('Ngày Lập Phiếu'),        
        'handinh': fields.date('Hạn Định'),
        'nguoilap': fields.integer('Người Lập'),
        'dssanpham': fields.function(_get_one2many_test, type="one2many", relation="khonvl.ctnvl",string='One2many Test'),
        'state': fields.selection([
        ('new','Mới'),
        ('xuly','Xác Nhận'),
        ('thanhcong','Thành Công'),
        ('huy','Hủy')],'Trạng Thái', readonly=True)
    }
    _defaults={
               'loai':'dinhky'
    
    }
phieunhapct()

class phieunhap(osv.osv):
    
    _name="khonvl.phieunhap"
    _columns={
                'maphieu':fields.char(u'Mã Phiếu', required=True),
                'ngay':fields.datetime(u'Ngày Ghi Phiếu'),
                'ghichu':fields.text(u'Ghi Chú'),
                'nhanvien':fields.char(u'Nhân Viên Nhập Hàng'),
                'kho':fields.char(u'Kho'),              
                'chitietpn':fields.many2one('khonvl.phieunhapct',u'Chi Tiết Phiếu Nhập'),                            
            }
       
phieunhap()

class phieuxuat(osv.osv):
    _name="khonvl.phieuxuat"
    _columns={
              'maphieu':fields.char(u'Mã Phiếu', required=True),
              'ngay':fields.datetime(u'Ngày Ghi Phiếu'),
              'ghichu':fields.text(u'Ghi Chú'),
              'nhanvien':fields.char(u'Nhân Viên Nhận Hàng'),              
              'chitietpx':fields.many2one('khonvl.phieuxuatct',u'Chi Tiết Phiếu Xuất'),         
              }
phieuxuat()
class phieuxuatct(osv.osv):
    def phieuxuatct_new(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'new' })
        return True
        
    def phieuxuatct_xuly(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'xuly' })
        return True

    def phieuxuatct_huy(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'huy' })
        return True

    def phieuxuatct_thanhcong(self, cr, uid, ids):
        self.write(cr, uid, ids, { 'state' : 'thanhcong' })
        return True
    
    def phieuxuatct_nvl(self, cr, uid, ids, context=None):
        ctnvl = self.pool.get('khonvl.ctnvl')
        ma01 = ctnvl.create(cr, uid, {'soluong':ids[0]}, context=context) 
        return True
    
    def _get_one2many_1(self, cr, uid, ids, field_names, arg, context=None):
        res = {}
        for partner in self.browse(cr, uid, ids, context=context):
            res[partner.id] = []
            o2m_obj = self.pool.get('khonvl.ctnvl')
            exist_ids = o2m_obj.search(cr, uid, [('ma','=',partner.id), ('soluong','=','10')], context=context, order='id asc')
            if exist_ids:
            # just in case there are duplicate entries (to keep the db clean):
                unlink_ids = o2m_obj.search(cr, uid, [('ma','in',exist_ids), ('ma','!=',exist_ids[0])], context=context)
        return res
        
    _name ="khonvl.phieuxuatct"
    _columns ={
        'ma': fields.char('Mã Phiếu',size=100,required=True),
        'loai':fields.selection([('donhang','Đơn Hàng'),('dinhky','Định Kỳ')],'Theo Loại', required = True),
        'ngaylap': fields.date('Ngày Lập Phiếu'),        
        'handinh': fields.date('Hạn Định'),
        'nguoilap': fields.integer('Người Lập'),
        'dssanpham': fields.function(_get_one2many_1, type="one2many", relation="khonvl.ctnvl",string=u'Danh Sách Vật lIệu Xuất'),
        'state': fields.selection([
        ('new','Mới'),
        ('xuly','Xác Nhận'),
        ('thanhcong','Thành Công'),
        ('huy','Hủy')],'Trạng Thái', readonly=True)
    }
    _defaults={
               'loai':'dinhky'
    
    }
phieuxuatct()
